/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author konp
 */
package shared;

import java.io.Serializable;
import java.util.HashMap;

public class VectorClock implements Serializable
{
    private int myId;
    private HashMap<Integer, Integer> v = new HashMap<Integer, Integer>();
    private final int NUM_PROC = 10;

    
    public VectorClock(int id)
    {
        myId = id;
        for (int i = 0; i < NUM_PROC; i++)
            v.put(i, 0);
        v.put(myId, 1);

        RMILogger.add("  Tworzenie zegara. Uzyskano wektor : " + show());

    }
    
    // zwraca polaczony wektor z maksymalnymi wartosciami z obu wektorow
    public void update(VectorClock pTwo)
    {
        String addi = "  Synchronizacja  " + show() + " z : " + pTwo.show();

        // przejdz sie po elementach z drugiego wektora
        for (Integer lEntry : pTwo.v.keySet())
        {

            if (!v.containsKey(lEntry) || v.get(lEntry) < pTwo.v.get(lEntry))
            {
                v.put(lEntry, pTwo.v.get(lEntry));
            }
        }

       addi += ". Uzyskano wektor : " + show();
       RMILogger.add(addi);

    }

    public void increment()
    {
        v.put(myId, v.get(myId) + 1);
        RMILogger.add("  Inkrementacja wektora. Uzyskano wektor : " + show());
    }

    public final String show()
    {

        String array = "[ ";

        for (Integer lEntry : v.keySet())
        {
            array += v.get(lEntry) + " ";
        }

        array += "]";

        return array;
    }
}
